﻿CREATE  PROCEDURE [dbo].[MngDoDataBackup]
AS
-- Черноусов ОП 21.06.2006 BackUp-ит данные базы
DECLARE @BackupFileName as varchar(250), @strDbName as varchar(100)
SET NOCOUNT ON
--предпологается что 
--FULL BACKUP будет производиться еженедельно в воскресенье в 1 час ночи в новый файл
--DIFFERENTIAL BACKUP будет производиться ежедневно в 1 час ночи в файл, созданный в воскресенье

exec dbo.MngDatePartDBBackupFileName @BackupFileName OUTPUT

SET @strDbName = DB_NAME()

SET @BackupFileName = 'C:\DIBACKUP\' + @strDbName + '\' + @BackupFileName + ' DATA.bak'
--проверить существование временной таблицы
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id(N'tempdb..#tblTmp') ) 
	TRUNCATE TABLE #tblTmp 
ELSE
	CREATE TABLE #tblTmp (FileExists bit, IsDirectory bit, ParentDirExists bit)

INSERT INTO #tblTmp EXEC master..xp_fileexist @BackupFileName
--если не существует директории с файлами BackUp-ов то выход с ошибкой
IF EXISTS (SELECT * from #tblTmp WHERE ParentDirExists = 0 )
BEGIN
	SET @BackupFileName = 'Отсутствует директория для BackUp-ов! Файл - ' + @BackupFileName 
	RAISERROR ( @BackupFileName , 18, 1) WITH LOG
	RETURN 1
END

IF EXISTS (SELECT * from #tblTmp WHERE FileExists = 0 )
BEGIN --делается FULL BACKUP 
--	print 'FULL BACKUP'
	BACKUP DATABASE @strDbName TO DISK = @BackupFileName WITH INIT, NAME = N'Начальный FULL BACKUP', DESCRIPTION = N'BackUp автоматический MngDoDataBackup'
END ELSE BEGIN --делается DIFFERENTIAL BACKUP
--  print 'DIFFERENTIAL BACKUP'
	BACKUP DATABASE @strDbName TO DISK = @BackupFileName WITH DIFFERENTIAL, NOINIT, NOFORMAT, NAME = N'Ежедневный DIFFERENTIAL BACKUP', DESCRIPTION = N'BackUp автоматический MngDoDataBackup'
END
DROP TABLE #tblTmp 

RETURN 0


